- <a href = "F:\Node_projects\Node_Way\NBase\_Md\_Index\Perfect_Code\ru\cat.ru\dir.ru.md">ru</a>
    - <a href = "F:\Node_projects\Node_Way\NBase\_Md\_Index\Perfect_Code\ru\exdf.ancors_2.md">exdf.ancors_2.md</a>
        - *## 1 Добро пожаловать в мир конструирования ПО 2
        - *### 1.1. Что такое конструирование ПО 2
        - *### 1.2. Почему конструирование ПО так важно 5
        - *### 1.3. Как читать эту книгу 6
        - *## 2 Метафоры, позволяющие лучше понять разработку ПО 8
        - *### 2.1. Важность метафор 8
        - *### 2.2. Как использовать метафоры 10
        - *### 2.3. Популярные метафоры, характеризующие разработку ПО 12
        - *## 3 Семь раз отмерь, один раз отрежь: предварительные условия 21
        - *### 3.1. Важность выполнения предварительных условий 22
        - *### 3.2. Определите тип ПО, над которым вы работаете 28
        - *### 3.3. Предварительные условия, связанные с определением проблемы 34
        - *### 3.4. Предварительные условия, связанные с выработкой требований 36
        - *### 3.5. Предварительные условия, связанные с разработкой архитектуры 41
        - *### 3.6. Сколько времени следует посвятить выполнению предварительных условий 52
        - *## 4 Основные решения, которые приходится принимать при конструировании 58
        - *### 4.1. Выбор языка программирования 59
        - *### 4.2. Конвенции программирования 63
        - *### 4.3. Волны развития технологий 64
        - *### 4.4. Выбор основных методик конструирования 66
        - *## 5 Проектирование при конструировании 70
        - *### 5.1. Проблемы, связанные с проектированием ПО 71
        - *### 5.2. Основные концепции проектирования 74
        - *### 5.3. Компоненты проектирования: эвристические принципы 84
        - *### 5.4. Методики проектирования 107
        - *### 5.5. Комментарии по поводу популярных методологий 115
        - *## 6 Классы 121
        - *### 6.1. Основы классов: абстрактные типы данных 122
        - *### 6.2. Качественные интерфейсы классов 129
        - *### 6.3. Вопросы проектирования и реализации 139
        - *### 6.4. Разумные причины создания классов 148
        - *### 6.5. Аспекты, специфические для языков 152
        - *### 6.6. Следующий уровень: пакеты классов 153
        - *## 7 Высококачественные методы 157
        - *### 7.1. Разумные причины создания методов 160
        - *### 7.2. Проектирование на уровне методов 163
        - *### 7.3. Удачные имена методов 167
        - *### 7.4. Насколько объемным может быть метод 169
        - *### 7.5. Советы по использованию параметров методов 170
        - *### 7.6. Отдельные соображения по использованию функций 177
        - *### 7.7. Методы-макросы и встраиваемые методы 178
        - *## 8 Защитное программирование 182
        - *### 8.1. Защита программы от неправильных входных данных 183
        - *### 8.2. Утверждения 184
        - *### 8.3. Способы обработки ошибок 189
        - *### 8.4. Исключения 193
        - *### 8.5. Изоляция повреждений, вызванных ошибками 198
        - *### 8.6. Отладочные средства 200
        - *### 8.7. Доля защитного программирования в промышленной версии 204
        - *### 8.8. Защита от защитного программирования 206
        - *## 9 Процесс программирования с псевдокодом 209
        - *### 9.1. Этапы создания классов и методов 210
        - *### 9.2. Псевдокод для профи 211
        - *### 9.3. Конструирование методов с использованием ППП 214
        - *### 9.4. Альтернативы ППП 225
        - *## 10 Общие принципы использования переменных 230
        - *### 10.1. Что вы знаете о данных? 231
        - *### 10.2. Грамотное объявление переменных 232
        - *### 10.3. Принципы инициализации переменных 233
        - *### 10.4. Область видимости 238
        - *### 10.5. Персистентность 245
        - *### 10.6. Время связывания 246
        - *### 10.7. Связь между типами данных и управляющими структурами 247
        - *### 10.8. Единственность цели каждой переменной 249
        - *## 11 Сила имен переменных 252
        - *### 11.1. Общие принципы выбора имен переменных 253
        - *### 11.2. Именование конкретных типов данных 257
        - *### 11.3. Сила конвенций именования 263
        - *### 11.4. Неформальные конвенции именования 264
        - *### 11.5. Стандартизованные префиксы 272
        - *### 11.6. Грамотное сокращение имен переменных 274
        - *### 11.7. Имена, которых следует избегать 277
        - *## 12 Основные типы данных 282
        - *### 12.1. Числа в общем 283
        - *### 12.2. Целые числа 284
        - *### 12.3. Числа с плавающей запятой 286
        - *### 12.4. Символы и строки 289
        - *### 12.5. Логические переменные 292
        - *### 12.6. Перечислимые типы 294
        - *### 12.7. Именованные константы 299
        - *### 12.8. Массивы 301
        - *### 12.9. Создание собственных типов данных (псевдонимы) 303
        - *## 13 Нестандартные типы данных 310
        - *### 13.1. Структуры 310
        - *### 13.2. Указатели 314
        - *### 13.3. Глобальные данные 326
        - *## 14 Организация последовательного кода 338
        - *### 14.1. Операторы, следующие в определенном порядке 338
        - *### 14.2. Операторы, следующие в произвольном порядке 342
        - *## 15 Условные операторы 346
        - *### 15.1. Операторы if 346
        - *### 15.2. Операторы case 353
        - *## 16 Циклы 359
        - *### 16.1. Выбор типа цикла 359
        - *### 16.2. Управление циклом 365
        - *### 16.3. Простое создание цикла — изнутри наружу 378
        - *### 16.4. Соответствие между циклами и массивами 379
        - *## 17 Нестандартные управляющие структуры 382
        - *### 17.1. Множественные возвраты из метода 382
        - *### 17.2. Рекурсия 385
        - *### 17.3. Оператор goto 389
        - *### 17.4. Перспективы нестандартных управляющих структур 401
        - *## 18 Табличные методы 404
        - *### 18.1. Основные вопросы применения табличных методов 405
        - *### 18.2. Таблицы с прямым доступом 406
        - *### 18.3. Таблицы с индексированным доступом 418
        - *### 18.4. Таблицы со ступенчатым доступом 419
        - *### 18.5. Другие примеры табличного поиска 422
        - *## 19 Общие вопросы управления 424
        - *### 19.1. Логические выражения 424
        - *### 19.2. Составные операторы (блоки) 436
        - *### 19.3. Пустые выражения 437
        - *### 19.4. Укрощение опасно глубокой вложенности 438
        - *### 19.5. Основа программирования: структурное программирование 448
        - *### 19.6. Управляющие структуры и сложность 450
        - *## 20 Качество ПО 456
        - *### 20.1. Характеристики качества ПО 456
        - *### 20.2. Методики повышения качества ПО 459
        - *### 20.3. Относительная эффективность методик контроля качества ПО 462
        - *### 20.4. Когда выполнять контроль качества ПО 466
        - *### 20.5. Главный Закон Контроля Качества ПО 467
        - *## 21 Совместное конструирование 471
        - *### 21.1. Обзор методик совместной разработки ПО 472
        - *### 21.2. Парное программирование 475
        - *### 21.3. Формальные инспекции 477
        - *### 21.4. Другие методики совместной разработки ПО 484
        - *### 21.5. Сравнение методик совместного конструирования 487
        - *## 22 Тестирование, выполняемое разработчиками 490
        - *### 22.1. Тестирование, выполняемое разработчиками, и качество ПО 492
        - *### 22.2. Рекомендуемый подход к тестированию, выполняемому разработчиками 494
        - *### 22.3. Приемы тестирования 496
        - *### 22.4. Типичные ошибки 507
        - *### 22.5. Инструменты тестирования 513
        - *### 22.6. Оптимизация процесса тестирования 518
        - *### 22.7. Протоколы тестирования 520
        - *## 23 Отладка 524
        - *### 23.1. Общие вопросы отладки 524
        - *### 23.2. Поиск дефекта 529
        - *### 23.3. Устранение дефекта 539
        - *### 23.4. Психологические аспекты отладки 543
        - *### 23.5. Инструменты отладки — очевидные и не очень 545
        - *## 24 Рефакторинг 551
        - *### 24.1. Виды эволюции ПО 552
        - *### 24.2. Введение в рефакторинг 553
        - *### 24.3. Отдельные виды рефакторинга 559
        - *### 24.4. Безопасный рефакторинг 566
        - *### 24.5. Стратегии рефакторинга 568
        - *## 25 Стратегии оптимизации кода 572
        - *### 25.1. Общее обсуждение производительности ПО 573
        - *### 25.2. Введение в оптимизацию кода 576
        - *### 25.3. Где искать жир и патоку? 583
        - *### 25.4. Оценка производительности 588
        - *### 25.5. Итерация 590
        - *### 25.6. Подход к оптимизации кода: резюме 591
        - *## 26 Методики оптимизации кода 595
        - *### 26.1. Логика 596
        - *### 26.2. Циклы 602
        - *### 26.3. Изменения типов данных 611
        - *### 26.4. Выражения 616
        - *### 26.5. Методы 625
        - *### 26.6. Переписывание кода на низкоуровневом языке 626
        - *### 26.7. Если что-то одно изменяется, что#то другое всегда остается постоянным 629
        - *## 27 Как размер программы влияет на конструирование 634
        - *### 27.1. Взаимодействие и размер 635
        - *### 27.2. Диапазон размеров проектов 636
        - *### 27.3. Влияние размера проекта на возникновение ошибок 636
        - *### 27.4. Влияние размера проекта на производительность 638
        - *### 27.5. Влияние размера проекта на процесс разработки 639
        - *## 28 Управление конструированием 645
        - *### 28.1. Поощрение хорошего кодирования 646
        - *### 28.2. Управление конфигурацией 649
        - *### 28.3. Оценка графика конструирования 655
        - *### 28.4. Измерения 661
        - *### 28.5. Гуманное отношение к программистам 664
        - *### 28.6. Управление менеджером 670
        - *## 29 Интеграция 673
        - *### 29.1. Важность выбора подхода к интеграции 673
        - *### 29.2. Частота интеграции — поэтапная или инкрементная 675
        - *### 29.3. Стратегии инкрементной интеграции 678
        - *### 29.4. Ежедневная сборка и дымовые тесты 686
        - *## 30 Инструменты программирования 694
        - *### 30.1. Инструменты для проектирования 695
        - *### 30.2. Инструменты для работы с исходным кодом 695
        - *### 30.3. Инструменты для работы с исполняемым кодом 700
        - *### 30.4. Инструменты и среды 704
        - *### 30.5. Создание собственного программного инструментария 705
        - *### 30.6. Волшебная страна инструментальных средств 707
        - *## 31 Форматирование и стиль 712
        - *### 31.1. Основные принципы форматирования 713
        - *### 31.2. Способы форматирования 720
        - *### 31.3. Стили форматирования 721
        - *### 31.4. Форматирование управляющих структур 728
        - *### 31.5. Форматирование отдельных операторов 736
        - *### 31.6. Размещение комментариев 747
        - *### 31.7. Размещение методов 750
        - *### 31.8. Форматирование классов 752
        - *## 32 Самодокументирующийся код 760
        - *### 32.1. Внешняя документация 760
        - *### 32.2. Стиль программирования как вид документации 761
        - *### 32.3. Комментировать или не комментировать 764
        - *### 32.4. Советы по эффективному комментированию 768
        - *### 32.5. Методики комментирования 774
        - *### 32.6. Стандарты IEEE 795
        - *## 33 Личность 800
        - *### 33.1. Причем тут характер 801
        - *### 33.2. Интеллект и скромность 802
        - *### 33.3. Любопытство 803
        - *### 33.4. Профессиональная честность 806
        - *### 33.5. Общение и сотрудничество 809
        - *### 33.6. Творчество и дисциплина 809
        - *### 33.7. Лень 810
        - *### 33.8. Свойства, которые менее важны, чем кажется 811
        - *### 33.9. Привычки 813
        - *## 34 Основы мастерства 817
        - *### 34.1. Боритесь со сложностью 817
        - *### 34.2. Анализируйте процесс разработки 819
        - *### 34.3. Пишите программы в первую очередь для людей и лишь во вторую —
        - *### 34.4. Программируйте с использованием языка, а не на языке 823
        - *### 34.5. Концентрируйте внимание с помощью соглашений 824
        - *### 34.6. Программируйте в терминах проблемной области 825
        - *### 34.7. Опасайтесь падающих камней 827
        - *### 34.8. Итерируйте, итерируйте и итерируйте 830
        - *### 34.9. И да отделена будет религия от разработки ПО 831
        - *## 35 Где искать дополнительную информацию 834
        - *### 35.1. Информация о конструировании ПО 835
        - *### 35.2. Не связанные с конструированием темы 836
        - *### 35.3. Периодические издания 838
        - *### 35.4. Список литературы для разработчика ПО 839
        - *### 35.5. Профессиональные ассоциации 841
        - *## Библиография 842
        - *## Предметный указатель 863
        - *## Об авторе 868
